import runtimeType from '../../sys/runtimeType';
import toObject from '../../data/toObject';

/**
 * 【同步方法】操作应用临时内存数据(刷新就没有了)
 * @param type 处理方式，值域解释：get-获取、set-设置、clear-清除全部
 * @param data 要处理的数据，要求为对象数据格式，或者是json格式的字符串
 * @return 操作成功与否、或者是读取到的缓存数据
 */
function cacheMemory(type = 'get', data = {}) {
    
    // 初始化返回数据
    let data_return = null;
    // 临时变量名
    let str_name = '$focus_storage_cacheMemory';
    
    // 获取当前运行环境
    let runType = runtimeType();
    // 如果是“非UNI”环境
    if (runType == 'NOT-UNI')
    {
        // 设置缓存
        if (type == 'set')
        {
            // 转换data参数数据格式为json
            let obj_dataCan = toObject(data);
            // 如果转换成功
            if (obj_dataCan) {
                // 初始化 win上挂载的变量
                if (!window[str_name]) { window[str_name] = {}; }
                // 合并"已经保存的数据"和"准备保存的数据"
                let obj_together = Object.assign({}, window[str_name], obj_dataCan);
                // app实例全局变量 覆盖赋值
                window[str_name] = obj_together;
                // 标识为"处理成功"
                data_return = { "result": true };
            }
        }
        // 清除全部缓存
        else if (type == 'clear')
        {
            // 将数据设置成 null
            window[str_name] = null;
            // 标识为"处理成功"
            data_return = { "result": true };
        }
        // 其它默认为读取缓存
        else {
            // 获取挂载到window上的变量
            let obj_appGlobal = window[str_name];
            // 如果有数据，让结果数据等于实例全局变量
            if (obj_appGlobal) { data_return = obj_appGlobal; }
        }
    }
    // 如果是UNI环境
    else {
        // APP对象实体
        let myapp = getApp();
        // 设置缓存
        if (type == 'set')
        {
            // 转换data参数数据格式为json
            let obj_dataCan = toObject(data);
            // 如果转换成功
            if (obj_dataCan) {
                // 初始化 app实例全局变量
                if (!myapp.globalData[str_name]) { myapp.globalData[str_name] = {}; }
                // 合并"已经保存的数据"和"准备保存的数据"
                let obj_together = Object.assign({}, myapp.globalData[str_name], obj_dataCan);
                // app实例全局变量 覆盖赋值
                myapp.globalData[str_name] = obj_together;
                // 标识为"处理成功"
                data_return = { "result": true };
            }
        }
        // 清除全部缓存
        else if (type == 'clear')
        {
            // 将数据设置成 null
            myapp.globalData[str_name] = null;
            // 标识为"处理成功"
            data_return = { "result": true };
        }
        // 其它默认为读取缓存
        else {
            // 获取app实例全局变量
            let obj_appGlobal = myapp.globalData[str_name];
            // 如果有数据，让结果数据等于实例全局变量
            if (obj_appGlobal) { data_return = obj_appGlobal; }
        }
    }
    
    // 返回结果数据
    return data_return;
}

export default cacheMemory;